iT邦幫忙

2024 iThome 鐵人賽

DAY 10
0

原文連結:Debugging an ABAP Program

開發過程中免不了會遇到大大小小的bug,為了有效找出bug與他們的產地,一起來看如何在ABAP開發中使用debug mode吧!

設定中斷點(breakpoint)

當程式執行到設定好的中斷點,便會開啟debug模式,可以獨立觀察每一行以及每個變數的狀態,確保是否有非預期的行為發生。

雙擊或右鍵標示程式碼行數的地方,即可設定中斷點,記得要在active後才能設置中斷點。中斷點的設定會隨著user保留紀錄,不會因登出而消失。

執行到中斷點時,就會自動開啟debug介面,如下圖。可以從右上角的小圖示來回切換ABAP編輯器及Debug介面。
https://ithelp.ithome.com.tw/upload/images/20240906/20113802Vg0nszDcm1.png

Debug工具及特殊中斷點

導覽工具

https://ithelp.ithome.com.tw/upload/images/20240906/20113802eS4fRSGVDd.png
成功開啟debug介面後,有幾個重要工具方便我們檢查程式碼:

  • Step Into (F5):執行單獨一行,適用於一行一行檢查
  • Resume (F8):執行到下一個中斷點,若沒有下一個中斷點了,執行到程式結束並結束本次的debug流程
  • Run to Line (Shift+F8):執行到當前文字游標所在的行,另一種形式的中斷點替代品
  • Jump to Line (Shift+F12):向後跳躍,由於是跳躍,被跳過的程式行將不會執行。可以藉此模擬某幾行程式被刪除的執行結果
  • Terminate:結束當前的debug流程

特殊中斷點

有一些中斷點並不是以行數作為中斷標準,根據不同中斷條件可分為三種:

  1. 語法中斷點(Statement Breakpoint):遇到特定ABAP語法時中斷,例如,在執行到"CLEAR"時中斷。可以透過中斷點視窗的下拉選單設定。

  2. 例外中斷點(Exception Breakpoint):遇到特定例外況時中斷,無論該例外是否引發runtime error。一樣在中斷點視窗的下拉選單設定。

https://ithelp.ithome.com.tw/upload/images/20240906/20113802j3aB0rt7uJ.png

  1. 條件中斷點(Conditional Breakpoint):遇到特定條件時中斷,當該程式執行時滿足事先設定的中斷條件,便會立刻中斷。舉例而言,當一般中斷點位在DO迴圈中,每次迴圈執行到該行都會導致中斷,但此時若加上 sy-index > 20 的條件,則會在迴圈執行超過20次時才中斷。在中斷點列表的Condition欄位可為中斷加入條件。
    https://ithelp.ithome.com.tw/upload/images/20240906/20113802LofXpRZjiy.png

Watchpoints 觀察點

當有非預期的變數值導致程式錯誤,你可以透過設定觀察點來檢查可能導致問題的變數,舉例而言,對要觀察的變數右鍵,並在跳出選單選擇Set Watchpoints,該變數即可在中斷點列表內中追蹤。如同條件中斷點,也可以加上自定義的觀察條件。

https://ithelp.ithome.com.tw/upload/images/20240906/20113802xkpVoXayWM.png

用Variables Views 查看特定變數的值

查看變數值

可在Variables Views內直接查看單一變數、系統變數(如sy-index)等的值。以及可透過雙擊Internal Tables,進一步檢視儲存在表格裡的內容

https://ithelp.ithome.com.tw/upload/images/20240906/20113802bfYdVqAuK1.png

變更變數值

在權限範圍內,可以在debug時變更變數值。像是修改單一變數,或者對Internal Tables變更列的值、插入列及刪除列。

https://ithelp.ithome.com.tw/upload/images/20240906/201138022ZEyGVToqg.png

接著來更深入介紹ABAP的Class!


上一篇
Day09_Internal Table
下一篇
Day11_ABAP class 宣告
系列文
ABAP 基礎30天學習筆記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言